﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RepositorioSATT.Conexiones;
using DominioSATT;
using System.Data;

namespace RepositorioSATT
{
    public class InscripcionRepositorio : IInscripcionRepositorio, IMapeadorFila<Inscripcion>
    {
        protected Conexion conn;
        protected string sql;
        public InscripcionRepositorio()
        {
            conn = new Conexion();
        }
        #region Miembros de IInscripcionRepositorio

        public int Agregar(Inscripcion Objeto)
        {
            int UltimoId = 0;
            string Valores = "";
            if (Objeto.NroInscripcion == 0)
            {
                DataRow UltimoID = conn.Buscar(" Select MAX(IdInscripcion) From Inscripcion ");
                if (UltimoID[0].GetType() != typeof(DBNull))
                {
                    UltimoId = Convert.ToInt32(UltimoID[0]);
                    UltimoId++;
                }
                else
                    UltimoId = 1;
                Valores = UltimoId + "," + Objeto.Inscripto.Dni + "," + Objeto.Torneo.Id + ",'" + string.Format("{0:yyyyMMdd}", Objeto.Fecha) +
                "'," + Objeto.Puntos + ",'" + Objeto.Estado + "'";
            }
            else
            {
                Valores = Objeto.NroInscripcion + "," + Objeto.Inscripto.Dni + "," + Objeto.Torneo.Id + ",'" + string.Format("{0:yyyyMMdd}",Objeto.Fecha) +
                "'," + Objeto.Puntos + ",'" + Objeto.Estado + "'";
            }
            conn.AgregarSinId("Inscripcion", "IdInscripcion, Dni, IdTorneo, Fecha, Puntos, Estado", Valores);
            return UltimoId;
        }

        public DataTable DatosInscripcion(int NroCupom)
        {
            sql = "SELECT I.IdInscripcion as NroInscripcion, F.NOMBRE AS Federacion,CB.NOMBRE AS Club,E.NOMBRE AS Evento,C.NOMBRE AS Categoria,T.TIPO AS Torneo,T.Sexo,T.FECINICIO as InicioTorneo,T.FECFIN as FinTorneo,T.Estado FROM INSCRIPCION I INNER JOIN TORNEOS T ON I.IDTORNEO = T.IDTORNEO INNER JOIN CATEGORIAS C ON T.IDCATEGORIA = C.IDCATEGORIA INNER JOIN EVENTOS E ON T.IDEVENTO = E.IDEVENTO INNER JOIN CLUB CB ON E.IDCLUB = CB.IDCLUB INNER JOIN FEDERACION F ON CB.IDFEDERACION = F.IDFEDERACION WHERE I.IdInscripcion = " + NroCupom;
            DataTable Dt = conn.Listar(sql);
            return Dt;
        }

        public List<Inscripcion> Listar(int IdTorneo)
        {
            sql = " Select * From Inscripcion Where IdTorneo = " + IdTorneo + " And Estado = 'True'";
            DataTable Dt = conn.Listar(sql);
            List<Inscripcion> Lista = new List<Inscripcion>();
            foreach (DataRow Dr in Dt.Rows)
            {
                Lista.Add(this.MapearTabla(Dr));
            }
            return Lista;
        }

        public List<Inscripcion> ListarPorJugador(int Dni)
        {
            sql = " Select * From Inscripcion Where Dni = " + Dni;
            DataTable Dt = conn.Listar(sql);
            List<Inscripcion> Lista = new List<Inscripcion>();
            foreach (DataRow Dr in Dt.Rows)
            {
                Lista.Add(MapearTabla(Dr));
            }
            foreach (Inscripcion Insc in Lista)
            {
                //if(Insc.NroInscripcion == 
                    
            }
            return Lista;
        }

        public void ModificarEstado(Inscripcion Inscripcion, bool Estado)
        {
            sql = "UPDATE Inscripcion set estado ='" + Estado + "' where IdInscripcion =" + Inscripcion.NroInscripcion;
            conn.ActualizarOEliminar(sql);
            
        }

        public List<Inscripcion> Buscar(int NroInscripcion)
        { 
            sql = "select * from Inscripcion where IdInscripcion ="+NroInscripcion;
            List<Inscripcion> Lista = new List<Inscripcion>();
            DataTable dt = conn.Listar(sql);
            foreach (DataRow dr in dt.Rows)
            {
                Lista.Add(MapearTabla(dr));
            }
            return Lista;
        }

        #endregion

        #region Miembros de IMapeadorFila<Inscripcion>

        public Inscripcion MapearTabla(DataRow fila)
        {
            Inscripcion Retorno = null;
            if (fila != null)
            {
                IPersonaRepositorio repoPersona = new PersonaRepositorio();
                Persona bPersona = repoPersona.Obtener(Convert.ToInt32(fila["Dni"]));
                ITorneoRepositorio repoTorneo = new TorneoRepositorio();
                Torneo bTorneo = repoTorneo.ObtenerPorId(Convert.ToInt32(fila["IdTorneo"]));
                Retorno = new Inscripcion((fila.IsNull("IdInscripcion") == true ? 0 : Convert.ToInt32(fila["IdInscripcion"])),
                    bPersona, bTorneo, (fila.IsNull("Fecha") == true ? DateTime.Today : Convert.ToDateTime(fila["Fecha"])),
                    (fila.IsNull("Puntos") == true ? 0 : Convert.ToInt32(fila["Puntos"])),
                    (fila.IsNull("Estado") == true ? false : Convert.ToBoolean(fila["Estado"])));
            }
            return Retorno;
        }

        #endregion
    }
}
